<?php

/**
 * ==========================================
 * Configuración y arranque de la aplicación.
 * ==========================================
 */

require __DIR__.'/../vendor/autoload.php';

/**
 * Solución temporal para servidores web que no soportan reescrita de rutas.
 */
$_GET['_path_'] ??= \App\Helpers\URL::trimSlashes($_SERVER['PATH_INFO'] ?? '');

/**
 * Carga variables de entorno desde un archivo .env
 */
\App\Helpers\Env::readFile();

/**
 * Establece variables de entorno de la aplicación.
 */
foreach (\App\Helpers\Config::readFile('application') as $key => $value) {
    \App\Helpers\Env::set('app.'.$key, $value);
}

/**
 * Inicia una nueva sesión.
 */
session_start(['save_path' => __DIR__.'/../writable/session']);

/**
 * Crea una instancia del framework.
 */
$app = new \Riverside\Express\Application;

/**
 * Establece opciones de configuración del framework.
 */
foreach (\App\Helpers\Config::readFile('framework') as $key => $value) {
    $app->set($key, $value);
}

/**
 * Registra los servicios del framework.
 */
foreach (\App\Helpers\Config::readFile('services') as $key => $value) {
    $app->local($key, $value);
}

/**
 * Establece variables de entorno de la base de datos.
 */
foreach (\App\Helpers\Config::readFile('database') as $environment => $options) {
    foreach ($options as $option => $value) {
        \App\Helpers\Env::set($environment.'_'.$option, $value);
    }
}

/**
 * Se pasa la variable $app al archivo
 * y carga las rutas de la aplicación.
 */
require __DIR__.'/routes.php';

/**
 * Inicia la ejecución del framework.
 */
$app->run();
